package com.handpay.framework.upcard.sdom;

import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;

/**
 * @author <a href="mailto:justin.hou@handpay.com.cn">Sora</a>
 * @version 1.0 轻量级的XML的DOM解析器
 */
public class DomLite
{
	
	public DomLite()
	{
		dom_parser = new DomLiteParser();
	}
	
	/**
	 * 解析字节数据，返回xml的根节点�?
	 * 
	 * @param data
	 *            xml数据�?
	 * @return 根节点�?
	 */
	public TagNode load(byte[] data)
	{
		try
		{
			ByteArrayInputStream bais = new ByteArrayInputStream(data);
			InputStreamReader reader = new InputStreamReader(bais);
			
			TagNode root = dom_parser.parse(reader);
			return root;
		}
		catch (Exception ex)
		{
			return null;
		}
	}
	
	/**
	 * 根据特定编码，解析xml数据流，返回xml根节点�?
	 * 
	 * @param data
	 *            �?��解析数据流�?
	 * @param encode
	 *            数据流编码�?
	 * @return xml根节点�?
	 */
	public TagNode load(byte[] data, String encode)
	{
		try
		{
			if (encode == null)
				return load(data);
			else
			{
				ByteArrayInputStream bais = new ByteArrayInputStream(data);
				
				InputStreamReader reader = new InputStreamReader(bais, encode);
				
				TagNode root = dom_parser.parse(reader);
				
				return root;
			}
		}
		catch (Exception ex)
		{
			return null;
		}
	}
	
	/**
	 * 根据数据流解析xml，并返回根节点�?
	 * 
	 * @param is
	 *            xml数据流�?
	 * @return xml根节点�?
	 */
	public TagNode load(InputStream is)
	{
		try
		{
			InputStreamReader reader = new InputStreamReader(is);
			
			TagNode root = dom_parser.parse(reader);
			return root;
		}
		catch (Exception ex)
		{
			return null;
		}
	}
	
	/**
	 * 根据数据流和特定编码解析xml，返回xml根节点�?
	 * 
	 * @param is
	 *            数据流�?
	 * @param encode
	 *            数据流编码�?
	 * @return xml根节点�?
	 */
	public TagNode load(InputStream is, String encode)
	{
		try
		{
			if (encode == null)
				return load(is);
			else
			{
				InputStreamReader reader = new InputStreamReader(is, encode);
				
				TagNode root = dom_parser.parse(reader);
				return root;
			}
		}
		catch (Exception ex)
		{
			return null;
		}
	}
	
	/**
	 * 根据特定编码，解析xml字符串，返回xml根节点�?
	 * 
	 * @param xml
	 *            xml数据�?
	 * @param encode
	 *            xml字符串编码�?
	 * @return xml根节点�?
	 */
	public TagNode load(String xml, String encode)
	{
		try
		{
			byte[] buffer = xml.getBytes(encode);
			return load(buffer, encode);
		}
		catch (Exception ex)
		{
			return null;
		}
	}
	
	/**
	 * 根据默认编码解析xml字符串，返回xml根节点�?
	 * 
	 * @param xml
	 *            xml字符串�?
	 * @return xml根节点�?
	 */
	public TagNode load(String xml)
	{
		return load(xml, "UTF-8");
	}
	
	private DomLiteParser	dom_parser;
}
